TIC-80 carts contain lua source code. Getting to 16 bytes is hard, because the "TIC" function *must* exist or the cart is invalid. All the ways in which you can create a new function in lua already consume the entire 16 bytes without doing anything, let alone containing a loop of some sort. So, the only option is to assign the TIC variable to a function already in the environment that can be called with 0 arguments: cls, btn, key, math.random, etc. This consumes 8+ bytes without creating any visuals, but at least we have a valid cart now.

To create visuals, I use the SCN function. If not nil, this function is called automatically with an argument i, once per line of the framebuffer. Again looking into the pre-existing functions on the platform, one of the few that accepts one argument and actually affects the screen is cls(i), which clears the screen to color i. Because during a call of SCN(i) all the previous lines of the framebuffer are already locked to their final values, this ends up creating the horizontal bars you see. The final cart is 

    "TIC=cls SCN=cls" 

which is 15 bytes of text with headers excluded. All other legal 16 byte TIC-80 carts only produce monochrome images:

    "TIC=cls":        black screen
    "TIC=btn cls(1)": purple screen
    "TIC=btn cls(2)": red screen
    etc

I have tried to get carts using the print and pix functions to 16 bytes, but they stubbornly stay in the 17-19 bytes range:
    
    "SCN=print TIC=cls": grey lego block
    "BDR=print TIC=cls": grey square
    "SCN=print TIC=btn": grey rectangle
    "TIC=btn pix(9,9,9)": single green pixel

It looks to me like this entry simultaneously opens and closes the 16 byte category on this platform, for good :p



